const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : `0${n}`
}

function throttle(fn, gapTime) {
    if (gapTime == null || gapTime == undefined) {
        gapTime = 1500
    }
    let _lastTime = null
    return function () {
        let _nowTime = + new Date()
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn.apply(this, arguments)
            _lastTime = _nowTime
        }
    }
}


function debounce(callback, delay = 800) {
    var t = null
    return function () {
        clearTimeout(t)
        let cont = this;
        var args = arguments;
        t = setTimeout(function () {
            callback.apply(cont, args)
        }, delay)
    }
}

function toast(title, icon = "none") {
    wx.showToast({
        title, icon
    })
}

function loading(msg = "") {
    wx.showLoading({
        title: '' + msg,
        mask: true
    })
}

function promisify(api) {
  return (opt = {}) => {
    return new Promise((resolve, reject) => {
      api({
        ...opt,
        fail: reject,
        success: resolve
      })
    })
  }
}

module.exports = {
  formatTime,
  throttle,
  debounce,
  toast,
  loading,
  promisify,
}
